#include "login_dialog.h"
#include "ui_login_dialog.h"

Login_Dialog::Login_Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Login_Dialog)
{
    ui->setupUi(this);
    if(!connect2DB())
        QMessageBox::warning(this,"警告","账户信息数据库连接失败!");

}

Login_Dialog::~Login_Dialog()
{
    if(db.isOpen())
    {
        db.close();
    }
    delete ui;
}

void Login_Dialog::paintEvent(QPaintEvent *event)
{
    int w = width();
    int h = height();
    QPainter painter(this);
    QPixmap map(":/new/back/backimp/summer.png");
    painter.drawPixmap(0,0,w,h,map);
}

/***************************************连接函数*******************************/
bool Login_Dialog::connect2DB()
{
    // 连接数据库
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("Login_pass.db");
    db.setUserName("admin");
    db.setPassword("admin");
    if(db.open())
    {
        qDebug() << "数据库连接成功";
        createTable();
        return true;
    }else
    {
        QSqlError Error = db.lastError();
        QString text = Error.text();
        qDebug() << "数据库连接失败" << text;
        return false;
    }
}

/*******************************建表函数********************************/
void Login_Dialog::createTable()
{
        // 标准SQL建表语句
        QString sql = "CREATE TABLE Login(name text	PRIMARY KEY NOT NULL,password TEXT NOT NULL,Rmname BOOL,Rmpass BOOL)";
        // 创建数据库操作类对象
        QSqlQuery sq;
        // 执行上面的sql语句：正常情况下只有第一次建表成功
        if(sq.exec(sql))
        {
            qDebug() << "建表成功！";
        }else
        {
            // 错误信息
            QString text = sq.lastError().text();
            qDebug() << text;
        }
}

/*********************注册函数******************************/
void Login_Dialog::on_pushButton__register_clicked()
{
    QString name = ui->lineEdit_name->text();
    QString pass = ui->lineEdit_password->text();
    //判断用户是否输入为空
    if(name == "")
    {
        QMessageBox::warning(this,"警告","请输入用户名");
        return;
    }
    if(pass == "")
    {
        QMessageBox::warning(this,"警告","请输入密码");
        return;
    }

        //编写预处理的SQL语句
        QString sql = "INSERT INTO Login VALUES(?,?,?,?)";
        // 先对上面的sql语句进行预处理
        QSqlQuery sq;
        sq.prepare(sql);
        // 增加参数
        sq.addBindValue(name);
        sq.addBindValue(pass);
        sq.addBindValue(false);
        sq.addBindValue(false);

        // 执行SQL语句
            if(sq.exec())
            {
                QMessageBox::information(this,"通知","注册成功！");
            }else
            {
                // 错误信息
                QString text = sq.lastError().text();
                QMessageBox::warning(this,"警告","注册失败:有可能是用户名已被占用");
                qDebug() << "插入失败" << text;
            }
}

/*************************登陆函数*****************************/
void Login_Dialog::on_pushButton_login_clicked()
{
    //获取用户界面的输入
    QString name = ui->lineEdit_name->text();
    QString pass = ui->lineEdit_password->text();
    bool Rmn = ui->checkBox_name->isChecked();
    bool Rmp = ui->checkBox_password->isChecked();\
    //创建新的查询对象
    QSqlQuery sq;
    int namenumber = 0;
    QString sql = "SELECT * FROM Login WHERE name=?";
    sq.prepare(sql);
    sq.addBindValue(name);

    if(sq.exec())
    {
        if(sq.next())
        {
            if(sq.value(1) == pass)
            {
                QMessageBox::information(this,"通知","登陆成功！");
                QString sql2 = "UPDATE Login SET Rmname=?,Rmpass=? WHERE name=?";
                QSqlQuery sq2;
                sq2.prepare(sql2);
                sq2.addBindValue(Rmn);
                sq2.addBindValue(Rmp);
                sq2.addBindValue(name);
                if(sq2.exec())
                {
                    qDebug() << "登陆成功:checkbox信息已更新!";
                }else
                {
                    QString text = sq.lastError().text();
                    qDebug() << "登陆成功:checkbox信息更新失败" << text;
                }
                emit loginSuccess_Signal(name,pass);
                close();
            }
        }
    }else
    {
        QMessageBox::warning(this,"登陆","用户名和密码错误");
        qDebug() << "登陆信息查询失败";
        return;
    }



}
